package come.bjpowernode.javase.reflect;

import java.nio.charset.StandardCharsets;
import java.util.Date;

/*
要操作一个类的字节码文件，需要首先获取这个类的字节码，怎么获取java.lang.Class实例？
    三种方式：
        第一种：Class c = Class.forName("完整类名带包名")
        第二种：Class c = 引用.getClass();java中任何一个对象都有一个方法:getClass();
        第三种：Class c = int.class();第三种方式：java中任何一种数据类型，包括基本数据类型，都有.class属性。

 */
public class ReflectTest01 {
    public static void main(String[] args) {

        //第一种方式
        /*
        Class.forName()
            1、是一个静态方法
            2、方法的参数是一个字符串
            3、字符串的必须是一个完整的类名
            4、完整类名必须带有包名，java.lang也不能省
         */
        Class c1 = null;
        Class c2 = null;
        try {
            //c1代表String.class文件，或者说c1代表String类型
             c1 = Class.forName("java.lang.String");
             c2 = Class.forName("java.util.Date");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        //第二种方式
        //java中任何一个对象都有一个方法:getClass();
        String s = "abc";
        Class x = s.getClass();//x代表String.class字节码文件，x代表String类型

        System.out.println(c1 == x);//true(==判断的是对象的内存地址)

        Date time = new Date();
        Class y = time.getClass();
        System.out.println(y == c2);//true

        //第三种方式：java中任何一种数据类型，包括基本数据类型，都有.class属性。
        Class z = String.class;//z代表String类型
        Class k = Date.class;
        Class f = int.class;
        Class e = double.class;

        System.out.println(x==z);//true


    }
}
